home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / swingall.jar / javax / swing / JTree.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-07-15  |  26.1 KB  |  1,317 lines

  1. package javax.swing;
  2.  
  3. import java.awt.AWTEvent;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Dimension;
  7. import java.awt.LayoutManager;
  8. import java.awt.Point;
  9. import java.awt.Rectangle;
  10. import java.awt.event.InputEvent;
  11. import java.awt.event.MouseEvent;
  12. import java.io.IOException;
  13. import java.io.ObjectInputStream;
  14. import java.io.ObjectOutputStream;
  15. import java.io.Serializable;
  16. import java.util.Enumeration;
  17. import java.util.Hashtable;
  18. import java.util.Stack;
  19. import java.util.Vector;
  20. import javax.accessibility.Accessible;
  21. import javax.accessibility.AccessibleContext;
  22. import javax.accessibility.AccessibleState;
  23. import javax.swing.event.TreeExpansionEvent;
  24. import javax.swing.event.TreeExpansionListener;
  25. import javax.swing.event.TreeModelListener;
  26. import javax.swing.event.TreeSelectionEvent;
  27. import javax.swing.event.TreeSelectionListener;
  28. import javax.swing.event.TreeWillExpandListener;
  29. import javax.swing.plaf.TreeUI;
  30. import javax.swing.tree.DefaultMutableTreeNode;
  31. import javax.swing.tree.DefaultTreeModel;
  32. import javax.swing.tree.DefaultTreeSelectionModel;
  33. import javax.swing.tree.ExpandVetoException;
  34. import javax.swing.tree.TreeCellEditor;
  35. import javax.swing.tree.TreeCellRenderer;
  36. import javax.swing.tree.TreeModel;
  37. import javax.swing.tree.TreeNode;
  38. import javax.swing.tree.TreePath;
  39. import javax.swing.tree.TreeSelectionModel;
  40.  
  41. public class JTree extends JComponent implements Scrollable, Accessible {
  42.    private static final String uiClassID = "TreeUI";
  43.    protected transient TreeModel treeModel;
  44.    protected transient TreeSelectionModel selectionModel;
  45.    protected boolean rootVisible;
  46.    protected transient TreeCellRenderer cellRenderer;
  47.    protected int rowHeight;
  48.    private transient Hashtable expandedState;
  49.    protected boolean showsRootHandles;
  50.    protected transient TreeSelectionRedirector selectionRedirector;
  51.    protected transient TreeCellEditor cellEditor;
  52.    protected boolean editable;
  53.    protected boolean largeModel;
  54.    protected int visibleRowCount;
  55.    protected boolean invokesStopCellEditing;
  56.    protected boolean scrollsOnExpand;
  57.    protected int toggleClickCount;
  58.    protected transient TreeModelListener treeModelListener;
  59.    private transient Stack expandedStack;
  60.    private static int TEMP_STACK_SIZE = 11;
  61.    public static final String CELL_RENDERER_PROPERTY = "cellRenderer";
  62.    public static final String TREE_MODEL_PROPERTY = "treeModel";
  63.    public static final String ROOT_VISIBLE_PROPERTY = "rootVisible";
  64.    public static final String SHOWS_ROOT_HANDLES_PROPERTY = "showsRootHandles";
  65.    public static final String ROW_HEIGHT_PROPERTY = "rowHeight";
  66.    public static final String CELL_EDITOR_PROPERTY = "cellEditor";
  67.    public static final String EDITABLE_PROPERTY = "editable";
  68.    public static final String LARGE_MODEL_PROPERTY = "largeModel";
  69.    public static final String SELECTION_MODEL_PROPERTY = "selectionModel";
  70.    public static final String VISIBLE_ROW_COUNT_PROPERTY = "visibleRowCount";
  71.    public static final String INVOKES_STOP_CELL_EDITING_PROPERTY = "messagesStopCellEditing";
  72.    public static final String SCROLLS_ON_EXPAND_PROPERTY = "scrollsOnExpand";
  73.    // $FF: synthetic field
  74.    static Class class$javax$swing$event$TreeExpansionListener;
  75.    // $FF: synthetic field
  76.    static Class class$javax$swing$event$TreeWillExpandListener;
  77.    // $FF: synthetic field
  78.    static Class class$javax$swing$event$TreeSelectionListener;
  79.  
  80.    public JTree() {
  81.       this(getDefaultTreeModel());
  82.    }
  83.  
  84.    public JTree(Hashtable var1) {
  85.       this(createTreeModel(var1));
  86.       this.setRootVisible(false);
  87.       this.setShowsRootHandles(true);
  88.    }
  89.  
  90.    public JTree(Vector var1) {
  91.       this(createTreeModel(var1));
  92.       this.setRootVisible(false);
  93.       this.setShowsRootHandles(true);
  94.    }
  95.  
  96.    public JTree(TreeModel var1) {
  97.       this.expandedStack = new Stack();
  98.       this.toggleClickCount = 2;
  99.       this.expandedState = new Hashtable();
  100.       ((Container)this).setLayout((LayoutManager)null);
  101.       this.rowHeight = 16;
  102.       this.visibleRowCount = 20;
  103.       this.rootVisible = true;
  104.       this.selectionModel = new DefaultTreeSelectionModel();
  105.       this.cellRenderer = null;
  106.       this.scrollsOnExpand = true;
  107.       ((JComponent)this).setOpaque(true);
  108.       this.updateUI();
  109.       this.setModel(var1);
  110.    }
  111.  
  112.    public JTree(TreeNode var1) {
  113.       this(var1, false);
  114.    }
  115.  
  116.    public JTree(TreeNode var1, boolean var2) {
  117.       this((TreeModel)(new DefaultTreeModel(var1, var2)));
  118.    }
  119.  
  120.    public JTree(Object[] var1) {
  121.       this(createTreeModel(var1));
  122.       this.setRootVisible(false);
  123.       this.setShowsRootHandles(true);
  124.    }
  125.  
  126.    // $FF: synthetic method
  127.    static Hashtable access$0(JTree var0) {
  128.       return var0.expandedState;
  129.    }
  130.  
  131.    public void addSelectionInterval(int var1, int var2) {
  132.       TreePath[] var3 = this.getPathBetweenRows(var1, var2);
  133.       this.getSelectionModel().addSelectionPaths(var3);
  134.    }
  135.  
  136.    public void addSelectionPath(TreePath var1) {
  137.       this.makeVisible(var1);
  138.       this.getSelectionModel().addSelectionPath(var1);
  139.    }
  140.  
  141.    public void addSelectionPaths(TreePath[] var1) {
  142.       if (var1 != null) {
  143.          for(int var2 = var1.length - 1; var2 >= 0; --var2) {
  144.             this.makeVisible(var1[var2]);
  145.          }
  146.       }
  147.  
  148.       this.getSelectionModel().addSelectionPaths(var1);
  149.    }
  150.  
  151.    public void addSelectionRow(int var1) {
  152.       int[] var2 = new int[]{var1};
  153.       this.addSelectionRows(var2);
  154.    }
  155.  
  156.    public void addSelectionRows(int[] var1) {
  157.       TreeUI var2 = this.getUI();
  158.       if (var2 != null && var1 != null) {
  159.          int var3 = var1.length;
  160.          TreePath[] var4 = new TreePath[var3];
  161.  
  162.          for(int var5 = 0; var5 < var3; ++var5) {
  163.             var4[var5] = var2.getPathForRow(this, var1[var5]);
  164.          }
  165.  
  166.          this.addSelectionPaths(var4);
  167.       }
  168.  
  169.    }
  170.  
  171.    public void addTreeExpansionListener(TreeExpansionListener var1) {
  172.       super.listenerList.add(class$javax$swing$event$TreeExpansionListener != null ? class$javax$swing$event$TreeExpansionListener : (class$javax$swing$event$TreeExpansionListener = class$("javax.swing.event.TreeExpansionListener")), var1);
  173.    }
  174.  
  175.    public void addTreeSelectionListener(TreeSelectionListener var1) {
  176.       super.listenerList.add(class$javax$swing$event$TreeSelectionListener != null ? class$javax$swing$event$TreeSelectionListener : (class$javax$swing$event$TreeSelectionListener = class$("javax.swing.event.TreeSelectionListener")), var1);
  177.       if (super.listenerList.getListenerCount(class$javax$swing$event$TreeSelectionListener != null ? class$javax$swing$event$TreeSelectionListener : (class$javax$swing$event$TreeSelectionListener = class$("javax.swing.event.TreeSelectionListener"))) != 0 && this.selectionRedirector == null) {
  178.          this.selectionRedirector = new TreeSelectionRedirector(this);
  179.          this.selectionModel.addTreeSelectionListener(this.selectionRedirector);
  180.       }
  181.  
  182.    }
  183.  
  184.    public void addTreeWillExpandListener(TreeWillExpandListener var1) {
  185.       super.listenerList.add(class$javax$swing$event$TreeWillExpandListener != null ? class$javax$swing$event$TreeWillExpandListener : (class$javax$swing$event$TreeWillExpandListener = class$("javax.swing.event.TreeWillExpandListener")), var1);
  186.    }
  187.  
  188.    public void cancelEditing() {
  189.       TreeUI var1 = this.getUI();
  190.       if (var1 != null) {
  191.          var1.cancelEditing(this);
  192.       }
  193.  
  194.    }
  195.  
  196.    // $FF: synthetic method
  197.    static Class class$(String var0) {
  198.       try {
  199.          return Class.forName(var0);
  200.       } catch (ClassNotFoundException var2) {
  201.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  202.       }
  203.    }
  204.  
  205.    public void clearSelection() {
  206.       this.getSelectionModel().clearSelection();
  207.    }
  208.  
  209.    protected void clearToggledPaths() {
  210.       this.expandedState.clear();
  211.    }
  212.  
  213.    public void collapsePath(TreePath var1) {
  214.       this.setExpandedState(var1, false);
  215.    }
  216.  
  217.    public void collapseRow(int var1) {
  218.       this.collapsePath(this.getPathForRow(var1));
  219.    }
  220.  
  221.    public String convertValueToText(Object var1, boolean var2, boolean var3, boolean var4, int var5, boolean var6) {
  222.       return var1 != null ? var1.toString() : "";
  223.    }
  224.  
  225.    protected static TreeModel createTreeModel(Object var0) {
  226.       Object var1;
  227.       if (!(var0 instanceof Object[]) && !(var0 instanceof Hashtable) && !(var0 instanceof Vector)) {
  228.          var1 = new DynamicUtilTreeNode("root", var0);
  229.       } else {
  230.          var1 = new DefaultMutableTreeNode("root");
  231.          javax.swing.JTree.DynamicUtilTreeNode.createChildren((DefaultMutableTreeNode)var1, var0);
  232.       }
  233.  
  234.       return new DefaultTreeModel((TreeNode)var1, false);
  235.    }
  236.  
  237.    protected TreeModelListener createTreeModelListener() {
  238.       return new TreeModelHandler(this);
  239.    }
  240.  
  241.    public void expandPath(TreePath var1) {
  242.       TreeModel var2 = this.getModel();
  243.       if (var1 != null && var2 != null && !var2.isLeaf(var1.getLastPathComponent())) {
  244.          this.setExpandedState(var1, true);
  245.       }
  246.  
  247.    }
  248.  
  249.    public void expandRow(int var1) {
  250.       this.expandPath(this.getPathForRow(var1));
  251.    }
  252.  
  253.    public void fireTreeCollapsed(TreePath var1) {
  254.       Object[] var2 = super.listenerList.getListenerList();
  255.       TreeExpansionEvent var3 = null;
  256.  
  257.       for(int var4 = var2.length - 2; var4 >= 0; var4 -= 2) {
  258.          if (var2[var4] == (class$javax$swing$event$TreeExpansionListener != null ? class$javax$swing$event$TreeExpansionListener : (class$javax$swing$event$TreeExpansionListener = class$("javax.swing.event.TreeExpansionListener")))) {
  259.             if (var3 == null) {
  260.                var3 = new TreeExpansionEvent(this, var1);
  261.             }
  262.  
  263.             ((TreeExpansionListener)var2[var4 + 1]).treeCollapsed(var3);
  264.          }
  265.       }
  266.  
  267.    }
  268.  
  269.    public void fireTreeExpanded(TreePath var1) {
  270.       Object[] var2 = super.listenerList.getListenerList();
  271.       TreeExpansionEvent var3 = null;
  272.  
  273.       for(int var4 = var2.length - 2; var4 >= 0; var4 -= 2) {
  274.          if (var2[var4] == (class$javax$swing$event$TreeExpansionListener != null ? class$javax$swing$event$TreeExpansionListener : (class$javax$swing$event$TreeExpansionListener = class$("javax.swing.event.TreeExpansionListener")))) {
  275.             if (var3 == null) {
  276.                var3 = new TreeExpansionEvent(this, var1);
  277.             }
  278.  
  279.             ((TreeExpansionListener)var2[var4 + 1]).treeExpanded(var3);
  280.          }
  281.       }
  282.  
  283.    }
  284.  
  285.    public void fireTreeWillCollapse(TreePath var1) throws ExpandVetoException {
  286.       Object[] var2 = super.listenerList.getListenerList();
  287.       TreeExpansionEvent var3 = null;
  288.  
  289.       for(int var4 = var2.length - 2; var4 >= 0; var4 -= 2) {
  290.          if (var2[var4] == (class$javax$swing$event$TreeWillExpandListener != null ? class$javax$swing$event$TreeWillExpandListener : (class$javax$swing$event$TreeWillExpandListener = class$("javax.swing.event.TreeWillExpandListener")))) {
  291.             if (var3 == null) {
  292.                var3 = new TreeExpansionEvent(this, var1);
  293.             }
  294.  
  295.             ((TreeWillExpandListener)var2[var4 + 1]).treeWillCollapse(var3);
  296.          }
  297.       }
  298.  
  299.    }
  300.  
  301.    public void fireTreeWillExpand(TreePath var1) throws ExpandVetoException {
  302.       Object[] var2 = super.listenerList.getListenerList();
  303.       TreeExpansionEvent var3 = null;
  304.  
  305.       for(int var4 = var2.length - 2; var4 >= 0; var4 -= 2) {
  306.          if (var2[var4] == (class$javax$swing$event$TreeWillExpandListener != null ? class$javax$swing$event$TreeWillExpandListener : (class$javax$swing$event$TreeWillExpandListener = class$("javax.swing.event.TreeWillExpandListener")))) {
  307.             if (var3 == null) {
  308.                var3 = new TreeExpansionEvent(this, var1);
  309.             }
  310.  
  311.             ((TreeWillExpandListener)var2[var4 + 1]).treeWillExpand(var3);
  312.          }
  313.       }
  314.  
  315.    }
  316.  
  317.    protected void fireValueChanged(TreeSelectionEvent var1) {
  318.       Object[] var2 = super.listenerList.getListenerList();
  319.  
  320.       for(int var3 = var2.length - 2; var3 >= 0; var3 -= 2) {
  321.          if (var2[var3] == (class$javax$swing$event$TreeSelectionListener != null ? class$javax$swing$event$TreeSelectionListener : (class$javax$swing$event$TreeSelectionListener = class$("javax.swing.event.TreeSelectionListener")))) {
  322.             ((TreeSelectionListener)var2[var3 + 1]).valueChanged(var1);
  323.          }
  324.       }
  325.  
  326.    }
  327.  
  328.    public AccessibleContext getAccessibleContext() {
  329.       if (super.accessibleContext == null) {
  330.          super.accessibleContext = new AccessibleJTree(this);
  331.       }
  332.  
  333.       return super.accessibleContext;
  334.    }
  335.  
  336.    private Object getArchivableExpandedState() {
  337.       TreeModel var1 = this.getModel();
  338.       if (var1 != null) {
  339.          Enumeration var2 = this.expandedState.keys();
  340.          if (var2 != null) {
  341.             Vector var3 = new Vector();
  342.  
  343.             while(var2.hasMoreElements()) {
  344.                TreePath var4 = (TreePath)var2.nextElement();
  345.  
  346.                int[] var5;
  347.                try {
  348.                   var5 = this.getModelIndexsForPath(var4);
  349.                } catch (Error var6) {
  350.                   var5 = null;
  351.                }
  352.  
  353.                if (var5 != null) {
  354.                   var3.addElement(var5);
  355.                   var3.addElement(this.expandedState.get(var4));
  356.                }
  357.             }
  358.  
  359.             return var3;
  360.          }
  361.       }
  362.  
  363.       return null;
  364.    }
  365.  
  366.    public TreeCellEditor getCellEditor() {
  367.       return this.cellEditor;
  368.    }
  369.  
  370.    public TreeCellRenderer getCellRenderer() {
  371.       return this.cellRenderer;
  372.    }
  373.  
  374.    public TreePath getClosestPathForLocation(int var1, int var2) {
  375.       TreeUI var3 = this.getUI();
  376.       return var3 != null ? var3.getClosestPathForLocation(this, var1, var2) : null;
  377.    }
  378.  
  379.    public int getClosestRowForLocation(int var1, int var2) {
  380.       return this.getRowForPath(this.getClosestPathForLocation(var1, var2));
  381.    }
  382.  
  383.    protected static TreeModel getDefaultTreeModel() {
  384.       DefaultMutableTreeNode var0 = new DefaultMutableTreeNode("JTree");
  385.       DefaultMutableTreeNode var1 = new DefaultMutableTreeNode("colors");
  386.       var0.add(var1);
  387.       var1.add(new DefaultMutableTreeNode("blue"));
  388.       var1.add(new DefaultMutableTreeNode("violet"));
  389.       var1.add(new DefaultMutableTreeNode("red"));
  390.       var1.add(new DefaultMutableTreeNode("yellow"));
  391.       var1 = new DefaultMutableTreeNode("sports");
  392.       var0.add(var1);
  393.       var1.add(new DefaultMutableTreeNode("basketball"));
  394.       var1.add(new DefaultMutableTreeNode("soccer"));
  395.       var1.add(new DefaultMutableTreeNode("football"));
  396.       var1.add(new DefaultMutableTreeNode("hockey"));
  397.       var1 = new DefaultMutableTreeNode("food");
  398.       var0.add(var1);
  399.       var1.add(new DefaultMutableTreeNode("hot dogs"));
  400.       var1.add(new DefaultMutableTreeNode("pizza"));
  401.       var1.add(new DefaultMutableTreeNode("ravioli"));
  402.       var1.add(new DefaultMutableTreeNode("bananas"));
  403.       return new DefaultTreeModel(var0);
  404.    }
  405.  
  406.    protected Enumeration getDescendantToggledPaths(TreePath var1) {
  407.       if (var1 == null) {
  408.          return null;
  409.       } else {
  410.          Vector var2 = new Vector();
  411.          Enumeration var3 = this.expandedState.keys();
  412.  
  413.          while(var3.hasMoreElements()) {
  414.             TreePath var4 = (TreePath)var3.nextElement();
  415.             if (var1.isDescendant(var4)) {
  416.                var2.addElement(var4);
  417.             }
  418.          }
  419.  
  420.          return var2.elements();
  421.       }
  422.    }
  423.  
  424.    public TreePath getEditingPath() {
  425.       TreeUI var1 = this.getUI();
  426.       return var1 != null ? var1.getEditingPath(this) : null;
  427.    }
  428.  
  429.    public Enumeration getExpandedDescendants(TreePath var1) {
  430.       if (!this.isExpanded(var1)) {
  431.          return null;
  432.       } else {
  433.          Enumeration var2 = this.expandedState.keys();
  434.          Vector var3 = new Vector();
  435.          if (var2 != null) {
  436.             while(var2.hasMoreElements()) {
  437.                TreePath var4 = (TreePath)var2.nextElement();
  438.                Object var5 = this.expandedState.get(var4);
  439.                if (var5 != null && (Boolean)var5 && var1.isDescendant(var4) && this.isVisible(var4)) {
  440.                   var3.addElement(var4);
  441.                }
  442.             }
  443.          }
  444.  
  445.          return var3.elements();
  446.       }
  447.    }
  448.  
  449.    public boolean getInvokesStopCellEditing() {
  450.       return this.invokesStopCellEditing;
  451.    }
  452.  
  453.    public Object getLastSelectedPathComponent() {
  454.       TreePath var1 = this.getSelectionModel().getSelectionPath();
  455.       return var1 != null ? var1.getLastPathComponent() : null;
  456.    }
  457.  
  458.    public TreePath getLeadSelectionPath() {
  459.       return this.getSelectionModel().getLeadSelectionPath();
  460.    }
  461.  
  462.    public int getLeadSelectionRow() {
  463.       return this.getSelectionModel().getLeadSelectionRow();
  464.    }
  465.  
  466.    public int getMaxSelectionRow() {
  467.       return this.getSelectionModel().getMaxSelectionRow();
  468.    }
  469.  
  470.    public int getMinSelectionRow() {
  471.       return this.getSelectionModel().getMinSelectionRow();
  472.    }
  473.  
  474.    public TreeModel getModel() {
  475.       return this.treeModel;
  476.    }
  477.  
  478.    private int[] getModelIndexsForPath(TreePath var1) {
  479.       if (var1 == null) {
  480.          return null;
  481.       } else {
  482.          TreeModel var2 = this.getModel();
  483.          int var3 = var1.getPathCount();
  484.          int[] var4 = new int[var3 - 1];
  485.          Object var5 = var2.getRoot();
  486.  
  487.          for(int var6 = 1; var6 < var3; ++var6) {
  488.             var4[var6 - 1] = var2.getIndexOfChild(var5, var1.getPathComponent(var6));
  489.             var5 = var1.getPathComponent(var6);
  490.             if (var4[var6 - 1] < 0) {
  491.                return null;
  492.             }
  493.          }
  494.  
  495.          return var4;
  496.       }
  497.    }
  498.  
  499.    protected TreePath[] getPathBetweenRows(int var1, int var2) {
  500.       TreeUI var5 = this.getUI();
  501.       int var3 = Math.min(var1, var2);
  502.       int var4 = Math.max(var1, var2);
  503.       if (var5 == null) {
  504.          return null;
  505.       } else {
  506.          TreePath[] var6 = new TreePath[var4 - var3 + 1];
  507.  
  508.          for(int var7 = var3; var7 <= var4; ++var7) {
  509.             var6[var7 - var3] = var5.getPathForRow(this, var7);
  510.          }
  511.  
  512.          return var6;
  513.       }
  514.    }
  515.  
  516.    public Rectangle getPathBounds(TreePath var1) {
  517.       TreeUI var2 = this.getUI();
  518.       return var2 != null ? var2.getPathBounds(this, var1) : null;
  519.    }
  520.  
  521.    private TreePath getPathForIndexs(int[] var1) {
  522.       if (var1 == null) {
  523.          return null;
  524.       } else {
  525.          TreeModel var2 = this.getModel();
  526.          if (var2 == null) {
  527.             return null;
  528.          } else {
  529.             int var3 = var1.length;
  530.             Object var4 = var2.getRoot();
  531.             TreePath var5 = new TreePath(var4);
  532.  
  533.             for(int var6 = 0; var6 < var3; ++var6) {
  534.                var4 = var2.getChild(var4, var1[var6]);
  535.                if (var4 == null) {
  536.                   return null;
  537.                }
  538.  
  539.                var5 = var5.pathByAddingChild(var4);
  540.             }
  541.  
  542.             return var5;
  543.          }
  544.       }
  545.    }
  546.  
  547.    public TreePath getPathForLocation(int var1, int var2) {
  548.       TreePath var3 = this.getClosestPathForLocation(var1, var2);
  549.       if (var3 != null) {
  550.          Rectangle var4 = this.getPathBounds(var3);
  551.          if (var1 >= var4.x && var1 < var4.x + var4.width && var2 >= var4.y && var2 < var4.y + var4.height) {
  552.             return var3;
  553.          }
  554.       }
  555.  
  556.       return null;
  557.    }
  558.  
  559.    public TreePath getPathForRow(int var1) {
  560.       TreeUI var2 = this.getUI();
  561.       return var2 != null ? var2.getPathForRow(this, var1) : null;
  562.    }
  563.  
  564.    public Dimension getPreferredScrollableViewportSize() {
  565.       int var1 = ((JComponent)this).getPreferredSize().width;
  566.       int var2 = this.getVisibleRowCount();
  567.       int var3;
  568.       if (this.isFixedRowHeight()) {
  569.          var3 = var2 * this.getRowHeight();
  570.       } else {
  571.          TreeUI var4 = this.getUI();
  572.          if (var4 != null && var4.getRowCount(this) > 0) {
  573.             var3 = this.getRowBounds(0).height * var2;
  574.          } else {
  575.             var3 = 16 * var2;
  576.          }
  577.       }
  578.  
  579.       return new Dimension(var1, var3);
  580.    }
  581.  
  582.    public Rectangle getRowBounds(int var1) {
  583.       this.getPathForRow(var1);
  584.       return this.getPathBounds(this.getPathForRow(var1));
  585.    }
  586.  
  587.    public int getRowCount() {
  588.       TreeUI var1 = this.getUI();
  589.       return var1 != null ? var1.getRowCount(this) : 0;
  590.    }
  591.  
  592.    public int getRowForLocation(int var1, int var2) {
  593.       return this.getRowForPath(this.getPathForLocation(var1, var2));
  594.    }
  595.  
  596.    public int getRowForPath(TreePath var1) {
  597.       TreeUI var2 = this.getUI();
  598.       return var2 != null ? var2.getRowForPath(this, var1) : -1;
  599.    }
  600.  
  601.    public int getRowHeight() {
  602.       return this.rowHeight;
  603.    }
  604.  
  605.    public int getScrollableBlockIncrement(Rectangle var1, int var2, int var3) {
  606.       return var2 == 1 ? var1.height : var1.width;
  607.    }
  608.  
  609.    public boolean getScrollableTracksViewportHeight() {
  610.       if (((Component)this).getParent() instanceof JViewport) {
  611.          return ((JViewport)((Component)this).getParent()).getHeight() > ((JComponent)this).getPreferredSize().height;
  612.       } else {
  613.          return false;
  614.       }
  615.    }
  616.  
  617.    public boolean getScrollableTracksViewportWidth() {
  618.       if (((Component)this).getParent() instanceof JViewport) {
  619.          return ((JViewport)((Component)this).getParent()).getWidth() > ((JComponent)this).getPreferredSize().width;
  620.       } else {
  621.          return false;
  622.       }
  623.    }
  624.  
  625.    public int getScrollableUnitIncrement(Rectangle var1, int var2, int var3) {
  626.       if (var2 == 1) {
  627.          int var5 = this.getClosestRowForLocation(0, var1.y);
  628.          if (var5 != -1) {
  629.             Rectangle var4 = this.getRowBounds(var5);
  630.             if (var4.y != var1.y) {
  631.                if (var3 < 0) {
  632.                   return var1.y - var4.y;
  633.                }
  634.  
  635.                return var4.y + var4.height - var1.y;
  636.             }
  637.  
  638.             if (var3 >= 0) {
  639.                return var4.height;
  640.             }
  641.  
  642.             if (var5 != 0) {
  643.                var4 = this.getRowBounds(var5 - 1);
  644.                return var4.height;
  645.             }
  646.          }
  647.  
  648.          return 0;
  649.       } else {
  650.          return 4;
  651.       }
  652.    }
  653.  
  654.    public boolean getScrollsOnExpand() {
  655.       return this.scrollsOnExpand;
  656.    }
  657.  
  658.    public int getSelectionCount() {
  659.       return this.selectionModel.getSelectionCount();
  660.    }
  661.  
  662.    public TreeSelectionModel getSelectionModel() {
  663.       return this.selectionModel;
  664.    }
  665.  
  666.    public TreePath getSelectionPath() {
  667.       return this.getSelectionModel().getSelectionPath();
  668.    }
  669.  
  670.    public TreePath[] getSelectionPaths() {
  671.       return this.getSelectionModel().getSelectionPaths();
  672.    }
  673.  
  674.    public int[] getSelectionRows() {
  675.       return this.getSelectionModel().getSelectionRows();
  676.    }
  677.  
  678.    public boolean getShowsRootHandles() {
  679.       return this.showsRootHandles;
  680.    }
  681.  
  682.    public String getToolTipText(MouseEvent var1) {
  683.       if (var1 != null) {
  684.          Point var2 = var1.getPoint();
  685.          int var3 = this.getRowForLocation(var2.x, var2.y);
  686.          TreeCellRenderer var4 = this.getCellRenderer();
  687.          if (var3 != -1 && var4 != null) {
  688.             TreePath var5 = this.getPathForRow(var3);
  689.             Object var6 = var5.getLastPathComponent();
  690.             Component var7 = var4.getTreeCellRendererComponent(this, var6, this.isRowSelected(var3), this.isExpanded(var3), this.getModel().isLeaf(var6), var3, true);
  691.             if (var7 instanceof JComponent) {
  692.                Rectangle var9 = this.getPathBounds(var5);
  693.                var2.translate(-var9.x, -var9.y);
  694.                MouseEvent var8 = new MouseEvent(var7, ((AWTEvent)var1).getID(), ((InputEvent)var1).getWhen(), ((InputEvent)var1).getModifiers(), var2.x, var2.y, var1.getClickCount(), var1.isPopupTrigger());
  695.                return ((JComponent)var7).getToolTipText(var8);
  696.             }
  697.          }
  698.       }
  699.  
  700.       return null;
  701.    }
  702.  
  703.    public TreeUI getUI() {
  704.       return (TreeUI)super.ui;
  705.    }
  706.  
  707.    public String getUIClassID() {
  708.       return "TreeUI";
  709.    }
  710.  
  711.    public int getVisibleRowCount() {
  712.       return this.visibleRowCount;
  713.    }
  714.  
  715.    public boolean hasBeenExpanded(TreePath var1) {
  716.       return var1 != null && this.expandedState.get(var1) != null;
  717.    }
  718.  
  719.    public boolean isCollapsed(int var1) {
  720.       return this.isExpanded(var1) ^ true;
  721.    }
  722.  
  723.    public boolean isCollapsed(TreePath var1) {
  724.       return this.isExpanded(var1) ^ true;
  725.    }
  726.  
  727.    public boolean isEditable() {
  728.       return this.editable;
  729.    }
  730.  
  731.    public boolean isEditing() {
  732.       TreeUI var1 = this.getUI();
  733.       return var1 != null ? var1.isEditing(this) : false;
  734.    }
  735.  
  736.    public boolean isExpanded(int var1) {
  737.       TreeUI var2 = this.getUI();
  738.       if (var2 != null) {
  739.          TreePath var3 = var2.getPathForRow(this, var1);
  740.          if (var3 != null) {
  741.             return this.isExpanded(var3);
  742.          }
  743.       }
  744.  
  745.       return false;
  746.    }
  747.  
  748.    public boolean isExpanded(TreePath var1) {
  749.       if (var1 == null) {
  750.          return false;
  751.       } else {
  752.          Object var2 = this.expandedState.get(var1);
  753.          if (var2 != null && (Boolean)var2) {
  754.             TreePath var3 = var1.getParentPath();
  755.             return var3 != null ? this.isExpanded(var3) : true;
  756.          } else {
  757.             return false;
  758.          }
  759.       }
  760.    }
  761.  
  762.    public boolean isFixedRowHeight() {
  763.       return this.rowHeight > 0;
  764.    }
  765.  
  766.    public boolean isLargeModel() {
  767.       return this.largeModel;
  768.    }
  769.  
  770.    public boolean isPathEditable(TreePath var1) {
  771.       return this.isEditable();
  772.    }
  773.  
  774.    public boolean isPathSelected(TreePath var1) {
  775.       return this.getSelectionModel().isPathSelected(var1);
  776.    }
  777.  
  778.    public boolean isRootVisible() {
  779.       return this.rootVisible;
  780.    }
  781.  
  782.    public boolean isRowSelected(int var1) {
  783.       return this.getSelectionModel().isRowSelected(var1);
  784.    }
  785.  
  786.    public boolean isSelectionEmpty() {
  787.       return this.getSelectionModel().isSelectionEmpty();
  788.    }
  789.  
  790.    public boolean isVisible(TreePath var1) {
  791.       if (var1 != null) {
  792.          TreePath var2 = var1.getParentPath();
  793.          return var2 != null ? this.isExpanded(var2) : true;
  794.       } else {
  795.          return false;
  796.       }
  797.    }
  798.  
  799.    public void makeVisible(TreePath var1) {
  800.       if (var1 != null) {
  801.          TreePath var2 = var1.getParentPath();
  802.          if (var2 != null) {
  803.             this.expandPath(var2);
  804.          }
  805.       }
  806.  
  807.    }
  808.  
  809.    protected String paramString() {
  810.       String var1 = this.rootVisible ? "true" : "false";
  811.       String var2 = this.showsRootHandles ? "true" : "false";
  812.       String var3 = this.editable ? "true" : "false";
  813.       String var4 = this.largeModel ? "true" : "false";
  814.       String var5 = this.invokesStopCellEditing ? "true" : "false";
  815.       String var6 = this.scrollsOnExpand ? "true" : "false";
  816.       return super.paramString() + ",editable=" + var3 + ",invokesStopCellEditing=" + var5 + ",largeModel=" + var4 + ",rootVisible=" + var1 + ",rowHeight=" + this.rowHeight + ",scrollsOnExpand=" + var6 + ",showsRootHandles=" + var2 + ",toggleClickCount=" + this.toggleClickCount + ",visibleRowCount=" + this.visibleRowCount;
  817.    }
  818.  
  819.    private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
  820.       var1.defaultReadObject();
  821.       this.expandedState = new Hashtable();
  822.       this.expandedStack = new Stack();
  823.       Vector var2 = (Vector)var1.readObject();
  824.       int var3 = 0;
  825.       int var4 = var2.size();
  826.       if (var3 < var4 && var2.elementAt(var3).equals("cellRenderer")) {
  827.          ++var3;
  828.          this.cellRenderer = (TreeCellRenderer)var2.elementAt(var3);
  829.          ++var3;
  830.       }
  831.  
  832.       if (var3 < var4 && var2.elementAt(var3).equals("cellEditor")) {
  833.          ++var3;
  834.          this.cellEditor = (TreeCellEditor)var2.elementAt(var3);
  835.          ++var3;
  836.       }
  837.  
  838.       if (var3 < var4 && var2.elementAt(var3).equals("treeModel")) {
  839.          ++var3;
  840.          this.treeModel = (TreeModel)var2.elementAt(var3);
  841.          ++var3;
  842.       }
  843.  
  844.       if (var3 < var4 && var2.elementAt(var3).equals("selectionModel")) {
  845.          ++var3;
  846.          this.selectionModel = (TreeSelectionModel)var2.elementAt(var3);
  847.          ++var3;
  848.       }
  849.  
  850.       if (var3 < var4 && var2.elementAt(var3).equals("expandedState")) {
  851.          ++var3;
  852.          this.unarchiveExpandedState(var2.elementAt(var3));
  853.          ++var3;
  854.       }
  855.  
  856.       if (super.listenerList.getListenerCount(class$javax$swing$event$TreeSelectionListener != null ? class$javax$swing$event$TreeSelectionListener : (class$javax$swing$event$TreeSelectionListener = class$("javax.swing.event.TreeSelectionListener"))) != 0) {
  857.          this.selectionRedirector = new TreeSelectionRedirector(this);
  858.          this.selectionModel.addTreeSelectionListener(this.selectionRedirector);
  859.       }
  860.  
  861.       if (this.treeModel != null) {
  862.          this.treeModelListener = this.createTreeModelListener();
  863.          if (this.treeModelListener != null) {
  864.             this.treeModel.addTreeModelListener(this.treeModelListener);
  865.          }
  866.       }
  867.  
  868.    }
  869.  
  870.    protected void removeDescendantToggledPaths(Enumeration var1) {
  871.       if (var1 != null) {
  872.          while(var1.hasMoreElements()) {
  873.             Enumeration var2 = this.getDescendantToggledPaths((TreePath)var1.nextElement());
  874.             if (var2 != null) {
  875.                while(var2.hasMoreElements()) {
  876.                   this.expandedState.remove(var2.nextElement());
  877.                }
  878.             }
  879.          }
  880.       }
  881.  
  882.    }
  883.  
  884.    public void removeSelectionInterval(int var1, int var2) {
  885.       TreePath[] var3 = this.getPathBetweenRows(var1, var2);
  886.       this.getSelectionModel().removeSelectionPaths(var3);
  887.    }
  888.  
  889.    public void removeSelectionPath(TreePath var1) {
  890.       this.getSelectionModel().removeSelectionPath(var1);
  891.    }
  892.  
  893.    public void removeSelectionPaths(TreePath[] var1) {
  894.       this.getSelectionModel().removeSelectionPaths(var1);
  895.    }
  896.  
  897.    public void removeSelectionRow(int var1) {
  898.       int[] var2 = new int[]{var1};
  899.       this.removeSelectionRows(var2);
  900.    }
  901.  
  902.    public void removeSelectionRows(int[] var1) {
  903.       TreeUI var2 = this.getUI();
  904.       if (var2 != null && var1 != null) {
  905.          int var3 = var1.length;
  906.          TreePath[] var4 = new TreePath[var3];
  907.  
  908.          for(int var5 = 0; var5 < var3; ++var5) {
  909.             var4[var5] = var2.getPathForRow(this, var1[var5]);
  910.          }
  911.  
  912.          this.removeSelectionPaths(var4);
  913.       }
  914.  
  915.    }
  916.  
  917.    public void removeTreeExpansionListener(TreeExpansionListener var1) {
  918.       super.listenerList.remove(class$javax$swing$event$TreeExpansionListener != null ? class$javax$swing$event$TreeExpansionListener : (class$javax$swing$event$TreeExpansionListener = class$("javax.swing.event.TreeExpansionListener")), var1);
  919.    }
  920.  
  921.    public void removeTreeSelectionListener(TreeSelectionListener var1) {
  922.       super.listenerList.remove(class$javax$swing$event$TreeSelectionListener != null ? class$javax$swing$event$TreeSelectionListener : (class$javax$swing$event$TreeSelectionListener = class$("javax.swing.event.TreeSelectionListener")), var1);
  923.       if (super.listenerList.getListenerCount(class$javax$swing$event$TreeSelectionListener != null ? class$javax$swing$event$TreeSelectionListener : (class$javax$swing$event$TreeSelectionListener = class$("javax.swing.event.TreeSelectionListener"))) == 0 && this.selectionRedirector != null) {
  924.          this.selectionModel.removeTreeSelectionListener(this.selectionRedirector);
  925.          this.selectionRedirector = null;
  926.       }
  927.  
  928.    }
  929.  
  930.    public void removeTreeWillExpandListener(TreeWillExpandListener var1) {
  931.       super.listenerList.remove(class$javax$swing$event$TreeWillExpandListener != null ? class$javax$swing$event$TreeWillExpandListener : (class$javax$swing$event$TreeWillExpandListener = class$("javax.swing.event.TreeWillExpandListener")), var1);
  932.    }
  933.  
  934.    public void scrollPathToVisible(TreePath var1) {
  935.       if (var1 != null) {
  936.          this.makeVisible(var1);
  937.          Rectangle var2 = this.getPathBounds(var1);
  938.          if (var2 != null) {
  939.             ((JComponent)this).scrollRectToVisible(var2);
  940.             if (super.accessibleContext != null) {
  941.                ((AccessibleJTree)super.accessibleContext).fireVisibleDataPropertyChange();
  942.             }
  943.          }
  944.       }
  945.  
  946.    }
  947.  
  948.    public void scrollRowToVisible(int var1) {
  949.       this.scrollPathToVisible(this.getPathForRow(var1));
  950.    }
  951.  
  952.    public void setCellEditor(TreeCellEditor var1) {
  953.       TreeCellEditor var2 = this.cellEditor;
  954.       this.cellEditor = var1;
  955.       ((JComponent)this).firePropertyChange("cellEditor", var2, var1);
  956.       ((Container)this).invalidate();
  957.    }
  958.  
  959.    public void setCellRenderer(TreeCellRenderer var1) {
  960.       TreeCellRenderer var2 = this.cellRenderer;
  961.       this.cellRenderer = var1;
  962.       ((JComponent)this).firePropertyChange("cellRenderer", var2, this.cellRenderer);
  963.       ((Container)this).invalidate();
  964.    }
  965.  
  966.    public void setEditable(boolean var1) {
  967.       boolean var2 = this.editable;
  968.       this.editable = var1;
  969.       ((JComponent)this).firePropertyChange("editable", var2, var1);
  970.       if (super.accessibleContext != null) {
  971.          super.accessibleContext.firePropertyChange("AccessibleState", var2 ? AccessibleState.EDITABLE : null, var1 ? AccessibleState.EDITABLE : null);
  972.       }
  973.  
  974.    }
  975.  
  976.    protected void setExpandedState(TreePath var1, boolean var2) {
  977.       if (var1 != null) {
  978.          TreePath var4 = var1.getParentPath();
  979.          Stack var3;
  980.          if (this.expandedStack.size() == 0) {
  981.             var3 = new Stack();
  982.          } else {
  983.             var3 = (Stack)this.expandedStack.pop();
  984.          }
  985.  
  986.          try {
  987.             label181:
  988.             while(true) {
  989.                if (var4 == null) {
  990.                   int var7 = ((Vector)var3).size() - 1;
  991.  
  992.                   while(true) {
  993.                      if (var7 < 0) {
  994.                         break label181;
  995.                      }
  996.  
  997.                      var4 = (TreePath)var3.pop();
  998.                      if (!this.isExpanded(var4)) {
  999.                         try {
  1000.                            this.fireTreeWillExpand(var4);
  1001.                         } catch (ExpandVetoException var14) {
  1002.                            return;
  1003.                         }
  1004.  
  1005.                         this.expandedState.put(var4, Boolean.TRUE);
  1006.                         this.fireTreeExpanded(var4);
  1007.                         if (super.accessibleContext != null) {
  1008.                            ((AccessibleJTree)super.accessibleContext).fireVisibleDataPropertyChange();
  1009.                         }
  1010.                      }
  1011.  
  1012.                      --var7;
  1013.                   }
  1014.                }
  1015.  
  1016.                if (this.isExpanded(var4)) {
  1017.                   var4 = null;
  1018.                } else {
  1019.                   var3.push(var4);
  1020.                   var4 = var4.getParentPath();
  1021.                }
  1022.             }
  1023.          } finally {
  1024.             if (this.expandedStack.size() < TEMP_STACK_SIZE) {
  1025.                ((Vector)var3).removeAllElements();
  1026.                this.expandedStack.push(var3);
  1027.             }
  1028.  
  1029.          }
  1030.  
  1031.          if (!var2) {
  1032.             Object var5 = this.expandedState.get(var1);
  1033.             if (var5 != null && (Boolean)var5) {
  1034.                try {
  1035.                   this.fireTreeWillCollapse(var1);
  1036.                } catch (ExpandVetoException var13) {
  1037.                   return;
  1038.                }
  1039.  
  1040.                this.expandedState.put(var1, Boolean.FALSE);
  1041.                this.fireTreeCollapsed(var1);
  1042.                if (super.accessibleContext != null) {
  1043.                   ((AccessibleJTree)super.accessibleContext).fireVisibleDataPropertyChange();
  1044.                }
  1045.             }
  1046.          } else {
  1047.             Object var17 = this.expandedState.get(var1);
  1048.             if (var17 == null || !(Boolean)var17) {
  1049.                try {
  1050.                   this.fireTreeWillExpand(var1);
  1051.                } catch (ExpandVetoException var12) {
  1052.                   return;
  1053.                }
  1054.  
  1055.                this.expandedState.put(var1, Boolean.TRUE);
  1056.                this.fireTreeExpanded(var1);
  1057.                if (super.accessibleContext != null) {
  1058.                   ((AccessibleJTree)super.accessibleContext).fireVisibleDataPropertyChange();
  1059.                }
  1060.             }
  1061.          }
  1062.       }
  1063.  
  1064.    }
  1065.  
  1066.    public void setInvokesStopCellEditing(boolean var1) {
  1067.       boolean var2 = this.invokesStopCellEditing;
  1068.       this.invokesStopCellEditing = var1;
  1069.       ((JComponent)this).firePropertyChange("messagesStopCellEditing", var2, var1);
  1070.    }
  1071.  
  1072.    public void setLargeModel(boolean var1) {
  1073.       boolean var2 = this.largeModel;
  1074.       this.largeModel = var1;
  1075.       ((JComponent)this).firePropertyChange("largeModel", var2, var1);
  1076.    }
  1077.  
  1078.    public void setModel(TreeModel var1) {
  1079.       TreeModel var2 = this.treeModel;
  1080.       if (this.treeModel != null && this.treeModelListener != null) {
  1081.          this.treeModel.removeTreeModelListener(this.treeModelListener);
  1082.       }
  1083.  
  1084.       if (super.accessibleContext != null) {
  1085.          if (this.treeModel != null) {
  1086.             this.treeModel.removeTreeModelListener((TreeModelListener)super.accessibleContext);
  1087.          }
  1088.  
  1089.          if (var1 != null) {
  1090.             var1.addTreeModelListener((TreeModelListener)super.accessibleContext);
  1091.          }
  1092.       }
  1093.  
  1094.       this.treeModel = var1;
  1095.       this.clearToggledPaths();
  1096.       if (this.treeModel != null) {
  1097.          if (this.treeModelListener == null) {
  1098.             this.treeModelListener = this.createTreeModelListener();
  1099.          }
  1100.  
  1101.          if (this.treeModelListener != null) {
  1102.             this.treeModel.addTreeModelListener(this.treeModelListener);
  1103.          }
  1104.  
  1105.          if (!this.treeModel.isLeaf(this.treeModel.getRoot())) {
  1106.             this.expandedState.put(new TreePath(this.treeModel.getRoot()), Boolean.TRUE);
  1107.          }
  1108.       }
  1109.  
  1110.       ((JComponent)this).firePropertyChange("treeModel", var2, this.treeModel);
  1111.       ((Container)this).invalidate();
  1112.    }
  1113.  
  1114.    public void setRootVisible(boolean var1) {
  1115.       boolean var2 = this.rootVisible;
  1116.       this.rootVisible = var1;
  1117.       ((JComponent)this).firePropertyChange("rootVisible", var2, this.rootVisible);
  1118.       if (super.accessibleContext != null) {
  1119.          ((AccessibleJTree)super.accessibleContext).fireVisibleDataPropertyChange();
  1120.       }
  1121.  
  1122.    }
  1123.  
  1124.    public void setRowHeight(int var1) {
  1125.       int var2 = this.rowHeight;
  1126.       this.rowHeight = var1;
  1127.       ((JComponent)this).firePropertyChange("rowHeight", var2, this.rowHeight);
  1128.       ((Container)this).invalidate();
  1129.    }
  1130.  
  1131.    public void setScrollsOnExpand(boolean var1) {
  1132.       boolean var2 = this.scrollsOnExpand;
  1133.       this.scrollsOnExpand = var1;
  1134.       ((JComponent)this).firePropertyChange("scrollsOnExpand", var2, var1);
  1135.    }
  1136.  
  1137.    public void setSelectionInterval(int var1, int var2) {
  1138.       TreePath[] var3 = this.getPathBetweenRows(var1, var2);
  1139.       this.getSelectionModel().setSelectionPaths(var3);
  1140.    }
  1141.  
  1142.    public void setSelectionModel(TreeSelectionModel var1) {
  1143.       if (var1 == null) {
  1144.          var1 = javax.swing.JTree.EmptySelectionModel.sharedInstance();
  1145.       }
  1146.  
  1147.       TreeSelectionModel var2 = this.selectionModel;
  1148.       if (this.selectionModel != null && this.selectionRedirector != null) {
  1149.          this.selectionModel.removeTreeSelectionListener(this.selectionRedirector);
  1150.       }
  1151.  
  1152.       if (super.accessibleContext != null) {
  1153.          this.selectionModel.removeTreeSelectionListener((TreeSelectionListener)super.accessibleContext);
  1154.          ((TreeSelectionModel)var1).addTreeSelectionListener((TreeSelectionListener)super.accessibleContext);
  1155.       }
  1156.  
  1157.       this.selectionModel = (TreeSelectionModel)var1;
  1158.       if (this.selectionRedirector != null) {
  1159.          this.selectionModel.addTreeSelectionListener(this.selectionRedirector);
  1160.       }
  1161.  
  1162.       ((JComponent)this).firePropertyChange("selectionModel", var2, this.selectionModel);
  1163.       if (super.accessibleContext != null) {
  1164.          super.accessibleContext.firePropertyChange("AccessibleSelection", new Boolean(false), new Boolean(true));
  1165.       }
  1166.  
  1167.    }
  1168.  
  1169.    public void setSelectionPath(TreePath var1) {
  1170.       this.makeVisible(var1);
  1171.       this.getSelectionModel().setSelectionPath(var1);
  1172.    }
  1173.  
  1174.    public void setSelectionPaths(TreePath[] var1) {
  1175.       if (var1 != null) {
  1176.          for(int var2 = var1.length - 1; var2 >= 0; --var2) {
  1177.             this.makeVisible(var1[var2]);
  1178.          }
  1179.       }
  1180.  
  1181.       this.getSelectionModel().setSelectionPaths(var1);
  1182.    }
  1183.  
  1184.    public void setSelectionRow(int var1) {
  1185.       int[] var2 = new int[]{var1};
  1186.       this.setSelectionRows(var2);
  1187.    }
  1188.  
  1189.    public void setSelectionRows(int[] var1) {
  1190.       TreeUI var2 = this.getUI();
  1191.       if (var2 != null && var1 != null) {
  1192.          int var3 = var1.length;
  1193.          TreePath[] var4 = new TreePath[var3];
  1194.  
  1195.          for(int var5 = 0; var5 < var3; ++var5) {
  1196.             var4[var5] = var2.getPathForRow(this, var1[var5]);
  1197.          }
  1198.  
  1199.          this.setSelectionPaths(var4);
  1200.       }
  1201.  
  1202.    }
  1203.  
  1204.    public void setShowsRootHandles(boolean var1) {
  1205.       boolean var2 = this.showsRootHandles;
  1206.       TreeModel var3 = this.getModel();
  1207.       this.showsRootHandles = var1;
  1208.       ((JComponent)this).firePropertyChange("showsRootHandles", var2, this.showsRootHandles);
  1209.       if (super.accessibleContext != null) {
  1210.          ((AccessibleJTree)super.accessibleContext).fireVisibleDataPropertyChange();
  1211.       }
  1212.  
  1213.       if (var3 != null) {
  1214.          this.expandPath(new TreePath(var3.getRoot()));
  1215.       }
  1216.  
  1217.       ((Container)this).invalidate();
  1218.    }
  1219.  
  1220.    public void setUI(TreeUI var1) {
  1221.       if ((TreeUI)super.ui != var1) {
  1222.          super.setUI(var1);
  1223.          ((Component)this).repaint();
  1224.       }
  1225.  
  1226.    }
  1227.  
  1228.    public void setVisibleRowCount(int var1) {
  1229.       int var2 = this.visibleRowCount;
  1230.       this.visibleRowCount = var1;
  1231.       ((JComponent)this).firePropertyChange("visibleRowCount", var2, this.visibleRowCount);
  1232.       ((Container)this).invalidate();
  1233.       if (super.accessibleContext != null) {
  1234.          ((AccessibleJTree)super.accessibleContext).fireVisibleDataPropertyChange();
  1235.       }
  1236.  
  1237.    }
  1238.  
  1239.    public void startEditingAtPath(TreePath var1) {
  1240.       TreeUI var2 = this.getUI();
  1241.       if (var2 != null) {
  1242.          var2.startEditingAtPath(this, var1);
  1243.       }
  1244.  
  1245.    }
  1246.  
  1247.    public boolean stopEditing() {
  1248.       TreeUI var1 = this.getUI();
  1249.       return var1 != null ? var1.stopEditing(this) : false;
  1250.    }
  1251.  
  1252.    public void treeDidChange() {
  1253.       ((JComponent)this).revalidate();
  1254.       ((Component)this).repaint();
  1255.    }
  1256.  
  1257.    private void unarchiveExpandedState(Object var1) {
  1258.       if (var1 instanceof Vector) {
  1259.          Vector var2 = (Vector)var1;
  1260.  
  1261.          for(int var3 = var2.size() - 1; var3 >= 0; --var3) {
  1262.             Boolean var4 = (Boolean)var2.elementAt(var3--);
  1263.  
  1264.             try {
  1265.                TreePath var5 = this.getPathForIndexs((int[])var2.elementAt(var3));
  1266.                if (var5 != null) {
  1267.                   this.expandedState.put(var5, var4);
  1268.                }
  1269.             } catch (Error var6) {
  1270.             }
  1271.          }
  1272.       }
  1273.  
  1274.    }
  1275.  
  1276.    public void updateUI() {
  1277.       this.setUI((TreeUI)UIManager.getUI(this));
  1278.       ((Container)this).invalidate();
  1279.    }
  1280.  
  1281.    private void writeObject(ObjectOutputStream var1) throws IOException {
  1282.       Vector var2 = new Vector();
  1283.       var1.defaultWriteObject();
  1284.       if (this.cellRenderer != null && this.cellRenderer instanceof Serializable) {
  1285.          var2.addElement("cellRenderer");
  1286.          var2.addElement(this.cellRenderer);
  1287.       }
  1288.  
  1289.       if (this.cellEditor != null && this.cellEditor instanceof Serializable) {
  1290.          var2.addElement("cellEditor");
  1291.          var2.addElement(this.cellEditor);
  1292.       }
  1293.  
  1294.       if (this.treeModel != null && this.treeModel instanceof Serializable) {
  1295.          var2.addElement("treeModel");
  1296.          var2.addElement(this.treeModel);
  1297.       }
  1298.  
  1299.       if (this.selectionModel != null && this.selectionModel instanceof Serializable) {
  1300.          var2.addElement("selectionModel");
  1301.          var2.addElement(this.selectionModel);
  1302.       }
  1303.  
  1304.       Object var3 = this.getArchivableExpandedState();
  1305.       if (var3 != null) {
  1306.          var2.addElement("expandedState");
  1307.          var2.addElement(var3);
  1308.       }
  1309.  
  1310.       var1.writeObject(var2);
  1311.       if (super.ui != null && this.getUIClassID().equals("TreeUI")) {
  1312.          super.ui.installUI(this);
  1313.       }
  1314.  
  1315.    }
  1316. }
  1317.